Implementación de NAT
- Siempre recalcular el checksum y setearlo al paquete como último paso antes de finalizar el procesamiento.
- La tabla debe mantener IP_priv, PORT_priv, IP_publ, PORT_publ, PROTOCOLO
- PORT_x puede ser también el identificador ICMP
- Los protocolos son TCP, UDP e ICMP. Esto es porque pueden existir sesiones TCP con el mismo puerto que una sesion UDP.
Implementación de Forwarding
- Chequear TTL y decrementarlo. Si TTL no es mayor a 1, se debe enviar el mensaje ICMP con TTL Expire.
- Longest Prefix Match a menos que digan lo contrario.
- Detectar multicast sabiendo que una dir. de multicast siempre comienza con 1110.
Sockets
- Cerrarlos apenas pueda (especialmente UDP)
- Para el server TCP, poner un client.close() luego del while(true) aunque parezca que nunca se va a ejecutar.
Simular una captura de paquetes en una interfaz:
- Si hay una conexión TCP, capturar el acuerdo en tres pasos inicial (SYN, SYN-ACK, ACK) y el cierre de conexión (FIN-ACK-FIN-ACK).
- Capturar ARP solo si no hay tablas cacheadas.
- Capturar DNS si los mensajes son hacia un hostname.
- Diferenciar HTTP GET de Response
HTTP y la web
- Una url puede incluir el número de puerto a consultar luego del nombre de dominio. El formato sería: {nomb_dominio | ip}:{num_puerto?}/{path_objeto_consultado}
- Generalmente conviene implementar una op. 'obtener_objeto' y luego llamarla varias veces a lo largo del programa. Ojo si es HTTP/1.1.
- El get es del siguiente formato:
- Para separar los header del contenido útil buscar
"\r\n\r\n"
.
- Las respuestas del servidor tienen como primer linea algo del estilo:
DHCP
- Cada vez que un host se une a la red, el servidor DHCP asigna una dirección arbitraria de su conjunto actual de direcciones disponibles; cada vez que un host abandona la red, su dirección es devuelta al conjunto.